package com.zeny.express.module.mdm.user.service;

import java.util.List;

import org.springframework.transaction.annotation.Transactional;

import com.zeny.express.api.mdm.user.IUserService;
import com.zeny.express.data.mdm.dto.parameter.UserSearchParameterDto;
import com.zeny.express.data.mdm.entity.UserEntity;
import com.zeny.express.framework.core.domain.Page;
import com.zeny.express.framework.log.annotation.LogBusiness;

/**
 * 用户模块内接口服务
 * 
 * @author zhuwei
 * @date 2013年8月15日 上午11:32:17
 */
public interface UserService extends IUserService {

	/**
	 * 通过 ID查询用户
	 * 
	 * @author zhuwei
	 * @date 2013年8月17日 下午4:56:27
	 */
	UserEntity getUserById(String id);

	/**
	 * 新增用户
	 * 
	 * @author zhuwei
	 * @date 2013年8月17日 下午4:56:38
	 */
	@Transactional("mdmdb")
	@LogBusiness(businessCode = "insertUserBusiness", entityId = "#result", entityCode = "#entity.loginCode", entityName = "#entity.name")
	String insertUser(UserEntity entity);
	
	/**
	 * 修改用户
	 * @author zhuwei
	 * @date 2013年11月1日 下午6:40:38
	 * @param entity 
	 */
	@Transactional("mdmdb")
	@LogBusiness(businessCode = "updateUserBusiness", entityId = "#entity.id", entityCode = "#entity.loginCode", entityName = "#entity.name")
	void updateUser(UserEntity entity);

	/**
	 * 批量插入用户
	 * 
	 * @author zhuwei
	 * @date 2013年8月17日 下午4:56:40
	 */
	@Transactional("mdmdb")
	void batchInsertUsers(List<UserEntity> list);

	/**
	 * 批量插入用户
	 * 
	 * @author zhuwei
	 * @date 2013年8月17日 下午4:56:40
	 */
	@Transactional("mdmdb")
	@LogBusiness(businessCode = "batchDeleteUsersBusiness", entityId = "#list.![#this.id]", entityCode = "#list.![#this.loginCode]", entityName = "#list.![#this.name]")
	void batchDeleteUsers(List<UserEntity> list);

	/**
	 * 翻页查询用户
	 * 
	 * @author zhuwei
	 * @date 2013年8月19日 下午1:30:00
	 * @param condition
	 * @param page
	 * @return
	 */
	@LogBusiness(businessCode = "queryUsersByPage")
	Page<UserEntity> searchUsersByPage(UserSearchParameterDto condition,
			Page<UserEntity> page);

}
